package top.frsf.autocodegen.service;

import freemarker.template.TemplateException;
import org.springframework.http.ResponseEntity;
import top.frsf.autocodegen.controller.dto.CodeGenDTO;
import top.frsf.autocodegen.meta.RootFileItem;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author FRSF
 * @date 2024/7/31 22:10
 * @desc CodeGenService
 */
public interface ICodeGeneratorService {

    /**
     * 生成代码到桌面
     *
     * @param dto 代码生成参数
     */
    void genCodeOnDesktop(CodeGenDTO dto);

    /**
     * 生成代码到浏览器(Zip)
     *
     * @param dto 代码生成参数
     * @return zip文件
     */
    ResponseEntity<byte[]> genCodeOnBrowser(CodeGenDTO dto) throws IOException, TemplateException;

    /**
     * 生成java文件
     *
     * @param dataModel 数据模型
     * @param templateName 模板名称
     * @param outputPath 输出路径
     */
    void generateJavaFile(Map<String, Object> dataModel, String templateName, String outputPath);

    /**
     * 获取目录下所有叶子节点文件 - 广度搜索
     *
     * @param rootPath 根目录
     * @return 文件列表
     */
    List<RootFileItem> bfsRootFile(String rootPath);

    /**
     * 获取数据模型
     *
     * @param tableId 表id
     * @return 数据模型
     */
    Map<String, Object> getDataModel(Integer tableId);
}
